package com.xiyuan.smartutils.template.engine.expression.operator;

import com.xiyuan.smartutils.template.engine.exception.ExpressionException;
import com.xiyuan.smartutils.template.engine.expression.Expression;
import com.xiyuan.smartutils.template.engine.expression.operator.logic._Or;
import com.xiyuan.smartutils.template.engine.statement._Var;

/**
 * WebPage运算符表达式基类<br>
 * <br>
 * 
 * 以下为Java操作符优先级排序<br>
 * 优先级 操作 结合性]<br>
 * 1 后缀运算符 [] . () (函数呼叫) 从左到右<br>
 * 2 单目运算符 ! ~ ++ -- +(单操作数) –(单操作数) 从右到左<br>
 * 3 创建 new 从左到右<br>
 * 4 乘除取模 * / % 从左到右<br>
 * 5 加减 + - 从左到右<br>
 * 6 移位 << >> >>> 从左到右<br>
 * 7 关系 < <= > >= instanceof 从左到右<br>
 * 8 相等 == != 从左到右<br>
 * 9 按位与 & 从左到右<br>
 * 10 按位异或 ^ 从左到右<br>
 * 11 按位或 | 从左到右<br>
 * 12 逻辑与 && 从左到右<br>
 * 13 逻辑或 || 从左到右<br>
 * 14 条件 ? : 从右到左<br>
 * 15 赋值 = += -= *= /= %= ^= <<= >>= >>>= 从右到左 <br>
 * 
 * WebPage操作符只实现如下操作符，共22个(其中1个赋值/20个运算表达式)：<br>
 * 1 后缀运算符 [ ] . ( )(方法调用或表达式括号) 从左到右<br>
 * 2 单目运算符 ! –(数值取负) ..(数值最小最大值) 　 从右到左<br>
 * 3 创建 new 从左到右<br>
 * 4 乘除取模 * / % 从左到右<br>
 * 5 加减 + - 从左到右<br>
 * 6 关系 lt lte gt gte 从左到右<br>
 * 7 相等 == != 从左到右<br>
 * 8 逻辑与 && 从左到右<br>
 * 9 逻辑或 || 从左到右<br>
 * 10 赋值 = 从右到左 <br>
 * 
 * @see _Var 其中赋值操作符(=)只存在于定义中<br>
 * @see _Or 其他操作符都可能出现在表达式中，以逻辑或 优化级最低，默认为_Or，依优化级从低到高依次判断<br>
 * @version v1.0.0 @author zouzhigang 2014-3-21 新建与整理
 */
public abstract class Operator extends Expression
{
    private static final long serialVersionUID = 1L;
    // 操作符
    public static final int NUMBER_ARR = 46460;// 整型数组
    /** []，可索引对象(含数组索引、列表索引和MAP取值) */
    public static final int INDEXABLE = 9193;// []，可索引对象(含数组索引、列表索引和MAP取值)
    /** 小括号( ) 4041 */
    public static final int PARENTHESIS = 4041;// ()括号
    public static final int METHOD = 40410;// ()0，方法
    public static final int ADD = 430;// +0加法
    public static final int NEGATIVE = 451;// -1取负
    public static final int SUBTRACTION = 452;// -2减法
    public static final int MULTIPLICATION = 420;// *0乘法
    public static final int DIVISION = 470;// /0除法
    public static final int MODULUS = 370;// %0取模
    
    public static final int EQUAL_EQUAL = 61610;// 大于
    public static final int GTHEN = 110;// 大于
    public static final int GTEQUAL = 120;// 大于等于
    public static final int LTHEN = 130;// 小于
    public static final int LTEQUAL = 140;// 小于等于
    
    public static final int NOT_EQUAL = 33610;// 不等
    public static final int VOLUATION = 610;// 复制操作
    public static final int AND = 3800;// 逻辑与
    public static final int OR = 1240;// 逻辑或
    public static final int NOT = 3300;// 取反
    public static final int TERNARY = 6358;// ?:
    
    public Operator(String path, int line, int column)
    {
        super(path, line, column);
    }
    
    /** 提供解析方法 */
    protected void parse() throws ExpressionException
    {
    }
}
